﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Server
{
    public class Hammerslag
    {
        int første, anden, tredje;
        bool b1, b2 , b3, budKommet, førsteBud;
        AuktionsService auktionsService;

        public Hammerslag(int første, int anden, int tredje, AuktionsService auktionsService)
        {
            this.første = første;
            this.anden = anden;
            this.tredje = tredje;
            this.auktionsService = auktionsService;
        }

        public void RunHammerslag()
        {
            b1 = false;
            b2 = false;
            b3 = false;
            førsteBud = false;
            budKommet = false;
            while (!førsteBud) ; // starter først efter der er givet et bud
            Console.WriteLine("første bud er givet");
            while (!b1 && !b2 && !b3) // første, anden og tredje har ikke været der
            {
                if (!b1) // hvis første ikke har været der
                {
                    for (int i = 0; i < første; i++)
                    {
                        if (budKommet) // tjekker om der er kommet nyt bud
                        {                            
                            break; // hopper ud af inderste løkke
                        }
                        else
                        {
                            Thread.Sleep(1000); // sov i 1 sekund
                        }
                    }
                    if (!budKommet)
                    {
                        // når tiden er gået, sættes første til true og der multicastes første til alle klienter
                        b1 = true;
                        auktionsService.MulticastBesked("Første");
                    }
                }
                if (b1 && !b2) //  første har været der men anden har ikke været der endnu
                {
                    // ligesom ovenfor
                    for (int i = 0; i < anden; i++)
                    {
                        if (budKommet)
                        {
                            break;
                        }
                        else
                        {
                            Thread.Sleep(1000);
                        }
                    }
                    if (!budKommet)
                    {
                        b2 = true;
                        auktionsService.MulticastBesked("Anden");
                    }
                }
                if (b1 && b2 && !b3) // første og anden har været der, men tredje har ikke været der endnu
                {
                    // ligesom ovenfor
                    for (int i = 0; i < tredje; i++)
                    {
                        if (budKommet)
                        {
                            break;
                        }
                        else
                        {
                            Thread.Sleep(1000);
                        }
                    }
                    if (!budKommet)
                    {
                        // hammerslag bliver kaldt som multicaster til klienterne
                        b3 = true;
                        auktionsService.Hammerslag();
                        budKommet = false;
                    }
                }
                if (budKommet)
                {
                    budKommet = false;
                }
            }
        }

        public void Bud()
        {
            // når der kommer nyt bud, sættes budkommet til true og hammerslaget hopper ud af løkken og starter forfra
            budKommet = true;
            b1 = false;
            b2 = false;
            b3 = false;
            førsteBud = true;
        }
    }
}
